package org.itstack.demo.design;

/**
 * @Author: gs
 * @Date: 2024/9/4 21:22
 * @Version: v1.0.0
 * @Description: TODO 饿汉模式，线程安全
 *
 * 饿汉模式：饿汉式在一开始类加载的时候就已经实例化，并且创建单例对象，以后只管用即可
 * 缺点是无论是否需要使用这个实例，它都会在类加载时被创建，这可能会导致资源的浪费，特别是当单例对象占用的资源较多或者类加载时间较长时。
 *
 * 饿汉模式通常将单例的实例直接定义为一个静态变量，并且这个静态变量在类被加载到JVM时就完成了初始化。由于JVM在类加载时保证了单线程执行（即所谓的类加载器锁，Class Loader Lock），所以这种初始化方式本身就是线程安全的。
 **/
public class Singleton_03 {
    //直接在声明时初始化，并且定义为final，防止被篡改
    private static final Singleton_03 instance = new Singleton_03();
    // 私有构造方法，防止外部通过new创建实例
    private Singleton_03(){

    }
    // 公有静态方法，直接返回类的唯一实例
    public static Singleton_03 getInstance(){
        // 由于instance在类加载时就已经初始化了，所以这里不需要判断是否为null
        //因此，饿汉式一定是线程安全，且只会发生一次
        return instance;
    }
}
